const express = require("express");
const bodyParser = require("body-parser");
const mongodb = require('mongodb')
const app = express();
const querystring = require("querystring");
const request = require("request");
const tools = require("./module/tools");
const db = require("./module/db")
app.use(express.static(__dirname + '/upload'))
app.use(express.static(__dirname));
app.use(bodyParser.json());
app.get('/shopTypeList', async function (req, res) {
    const limit = (req.query.limit || 30) / 1
    const arr = await db.find('shopTypeList', {
        limit,
        sortObj: {
            createTime: -1
        }
    });
    res.json({
        ok: 1,
        shopTypeList: tools.changArr(arr)
    })
})
app.get("/shopList", async function (req, res) {
    let pageIndex = (req.query.pageIndex || 1) / 1;// 当前页
    const whereObj = {};
    let shopName = req.query.shopName || "";
    if (shopName.length > 0) {
        whereObj.shopName = new RegExp(shopName);// 按照名字进行模糊搜索。
    }

    let count = await db.count("shopList", whereObj);// 统计文档数量
    let limit = 5;
    let pageSum = Math.ceil(count / limit);
    if (pageSum < 1) pageSum = 1;
    if (pageIndex > pageSum) pageIndex = pageSum;
    if (pageIndex < 1) pageIndex = 1;
    db.find("shopList", {
        sortObj: {
            createTime: -1
        },
        whereObj,
        limit,
        skip: (pageIndex - 1) * limit
    }).then(shopList => {
        // setTimeout(()=>{
        res.json({
            ok: 1,
            shopList,
            pageIndex,
            pageSum
        })
        // },2000)

    })
})
// 根据店铺类别ID查找店铺列表
app.get('/shopList/:shopTypeId', async function (req, res) {
    const shopTypeId = mongodb.ObjectId(req.params.shopTypeId)
    const shopList = await db.find('shopList', {
        whereObj: {
            shopTypeId
        },
        sortObj: {
            createTime: -1
        }
    })
    res.json({
        ok: 1,
        shopList
    })
})
// 根据ID 获得店铺的详情
app.get("/shopInfo/:shopId", async function (req, res) {
    const shopId = req.params.shopId;
    const shopInfo = await db.findOneById("shopList", shopId);
    res.json({
        ok: 1,
        shopInfo
    })
})
app.get('/search', async function (req, res) {
    const keyWord = req.query.keyWord
    const shopList = await db.find('shopList', {
        whereObj: {
            shopName: new RegExp(keyWord)
        },
        sortObj: {
            createTime: -1
        }
    })
    res.json({
        ok: 1,
        shopList
    })

})
app.get("/lagou", function (req, res) {
    // 访问的地址
    request("https://m.lagou.com/listmore.json?pageNo=2&pageSize=15", function (err, response, body) {
        if (!err && response.statusCode === 200) {
            res.json({
                results: JSON.parse(body)
            })
        } else {
            res.json({
                ok: -1,
                msg: "网络连接错误"
            })
        }
    })
})
app.get("/sendCode", async function (req, res) {
    // 接收手机号
    const phoneId = req.query.phoneId;
    // 生成验证码
    const code = tools.getRandom(100000, 999999);
    /*思路：
    * 1、根据手机号来查找是否有该用户
    *      1、有
    *           1、判断该短信是否过期
    *                1、过期
    *                   发送验证码
    *                   将当前的集合中的验证码与时间进行更新，返回成功
    *                2、未过期
    *                   给予未过期的提示。
    *      2、无
    *          1、增加用户，发送验证码
    */
    // phoneId:手机号
    // code:验证码
    // sendTime:发送验证码的时间
    const userInfo = await db.findOne("userList", {
        phoneId
    });
    if (userInfo) {//有
        // 判断该短信是否过期
        if (Date.now() - userInfo.sendTime > 1000 * 60) {
            await db.updateOne("userList", { phoneId }, { $set: { code, sendTime: Date.now() } });
            res.json({
                ok: 1,
                msg: "发送成功",
                code
            })
        } else {
            res.json({
                ok: -1,
                msg: "验证码未过期，请在" + (60 - Number.parseInt((Date.now() - userInfo.sendTime) / 1000)) + "秒以后再发送"
            })
        }

    } else {// 无
        await db.insertOne("userList", {
            phoneId,
            code,
            sendTime: Date.now()
        });
        res.json({
            ok: 1,
            msg: "发送成功",
            code
        })
    }

})
app.post("/login", async function (req, res) {
    const { phoneId, code } = req.body;
    const userInfo = await db.findOne("userList", {
        phoneId,
        code
    });
    if (userInfo) {
        // 判断验证是否有效，5分钟
        if (Date.now() - userInfo.sendTime > 1000 * 60 * 5) {
            res.json({
                ok: -1,
                msg: "验证码失效"
            })
        } else {
            res.json({
                ok: 1,
                msg: "登陆成功"
            })
        }
    } else {
        res.json({
            ok: -1,
            msg: "验证码错误"
        })
    }
})

// app.get("/sendCode",function (req,res) {
//     // 接收手机号
//     const mobile = req.query.phoneId;
//     // http://v.juhe.cn/sms/send?mobile=手机号码&tpl_id=短信模板ID&tpl_value=%23code%23%3D654654&key=
//     // 生成验证码
//     const tpl_value = tools.getRandom(100000,999999);
//     // 要传递的参数内容
//     const obj = {
//         mobile,//:"15029724529",
//         tpl_id:"164473",
//         tpl_value:"#code#="+tpl_value,
//         key:"b3549c4535d2f2048"
//     }
//     // 将参数对象转为urlencoded并拼接
//     let url = "http://v.juhe.cn/sms/send?"+querystring.stringify(obj);
//     // 发送请求
//     request(url,function (err,response,body) {
//         console.log(body);
//         if(!err && response.statusCode === 200){
//             const status = JSON.parse(body);
//             if(status.error_code === 0){
//                 res.json({
//                     ok:1,
//                     tpl_value
//                 })
//             }else{
//                 res.json({
//                     ok:-1,
//                     msg:status.reason
//                 })
//             }
//         }else{
//             res.json({
//                 ok:-1,
//                 msg:"网络请求错误"
//             })
//         }
//
//     })
//
// })
app.listen(8081, function () {
    console.log("success");
})